using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("StateEventTable")]
	public class StateEventTable : MonoBehaviour
	{
		[Attribute38("StateEventTable.StateEvent")]
		public class StateEvent : MonoClass
		{
			public string m_Name => method_4("m_Name");

			public Spell m_Event => method_3<Spell>("m_Event");

			public StateEvent(IntPtr address, string className)
				: base(address, className)
			{
			}

			public StateEvent(IntPtr address)
				: this(address, "StateEvent")
			{
			}
		}

		[Attribute38("StateEventTable.QueueStateEvent")]
		public class QueueStateEvent : MonoClass
		{
			public StateEvent m_StateEvent => method_3<StateEvent>("m_StateEvent");

			public string m_NameOverride => method_4("m_NameOverride");

			public bool m_SaveAsLastState => method_2<bool>("m_SaveAsLastState");

			public QueueStateEvent(IntPtr address, string className)
				: base(address, className)
			{
			}

			public QueueStateEvent(IntPtr address)
				: this(address, "QueueStateEvent")
			{
			}

			public string GetEventName()
			{
				return method_13("GetEventName");
			}
		}

		public List<StateEvent> m_Events => method_3<Class271<StateEvent>>("m_Events")?.method_25();

		public string m_LastState => method_4("m_LastState");

		public StateEventTable(IntPtr address, string className)
			: base(address, className)
		{
		}

		public StateEventTable(IntPtr address)
			: this(address, "StateEventTable")
		{
		}

		public void TriggerState(string eventName, bool saveLastState, string nameOverride)
		{
			method_8("TriggerState", eventName, saveLastState, nameOverride);
		}

		public bool HasState(string eventName)
		{
			return method_11<bool>("HasState", new object[1] { eventName });
		}

		public void CancelQueuedStates()
		{
			method_8("CancelQueuedStates");
		}

		public Spell GetSpellEvent(string eventName)
		{
			return method_14<Spell>("GetSpellEvent", new object[1] { eventName });
		}

		public string GetLastState()
		{
			return method_13("GetLastState");
		}

		public void SetFloatVar(string eventName, string varName, float value)
		{
			method_8("SetFloatVar", eventName, varName, value);
		}

		public void SetIntVar(string eventName, string varName, int value)
		{
			method_8("SetIntVar", eventName, varName, value);
		}

		public void SetBoolVar(string eventName, string varName, bool value)
		{
			method_8("SetBoolVar", eventName, varName, value);
		}

		public void SetGameObjectVar(string eventName, string varName, GameObject value)
		{
			method_9("SetGameObjectVar", new Class276.Enum20[3]
			{
				Class276.Enum20.String,
				Class276.Enum20.String,
				Class276.Enum20.Class
			}, eventName, varName, value);
		}

		public void SetGameObjectVar(string eventName, string varName, Component value)
		{
			method_9("SetGameObjectVar", new Class276.Enum20[3]
			{
				Class276.Enum20.String,
				Class276.Enum20.String,
				Class276.Enum20.Class
			}, eventName, varName, value);
		}

		public void SetVector3Var(string eventName, string varName, Vector3 value)
		{
			method_8("SetVector3Var", eventName, varName, value);
		}

		public void SetVar(string eventName, string varName, object value)
		{
			method_8("SetVar", eventName, varName, value);
		}

		public StateEvent GetStateEvent(string eventName)
		{
			return method_14<StateEvent>("GetStateEvent", new object[1] { eventName });
		}

		public void StartNextQueuedState(QueueStateEvent lastEvt)
		{
			method_8("StartNextQueuedState", lastEvt);
		}

		public void QueueNextState(Spell spell, SpellStateType prevStateType, object thisStateEvent)
		{
			method_8("QueueNextState", spell, prevStateType, thisStateEvent);
		}
	}
}
